package com.rzcode.coinex.kernel.dao.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.rzcode.coinex.kernel.common.enums.TransactionTypeEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 会员交易记录实体类，用于存储会员的交易详情，包括充值、提现、转账等操作。
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "member_transaction")
public class MemberTransaction {

    /**
     * 交易记录编号，主键，自动生成的唯一标识。
     */
    @ApiModelProperty(value = "交易记录编号", example = "1")
    private Long id;

    /**
     * 会员ID，与该交易记录关联的会员信息。
     */
    @ApiModelProperty(value = "会员ID", example = "1001")
    private Long memberId;

    /**
     * 交易金额，本次交易的金额。
     */
    @ApiModelProperty(value = "交易金额", example = "100.000000000000000000")
    private BigDecimal amount;

    /**
     * 创建时间，交易记录创建的时间戳。
     */
    @ApiModelProperty(value = "创建时间", example = "2023-01-01 12:00:00")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime createTime;

    /**
     * 交易类型，交易的类型，如充值、提现、转账等。
     */
    @ApiModelProperty(value = "交易类型", example = "DEPOSIT")
    private TransactionTypeEnum type;

    /**
     * 币种名称，交易涉及的币种，如BTC、ETH等。
     */
    @ApiModelProperty(value = "币种名称", example = "BTC")
    private String symbol;

    /**
     * 地址，交易相关的地址信息，如充值地址、提现地址或转账地址。
     */
    @ApiModelProperty(value = "地址", example = "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa")
    private String address;

    /**
     * 交易手续费，提现和转账时的手续费，充值无手续费；法币交易只收取发布广告一方的手续费。
     */
    @ApiModelProperty(value = "交易手续费", example = "0.000000000000000001")
    private BigDecimal fee = BigDecimal.ZERO;

    /**
     * 标识位，用于标记特殊交易情况，默认为0。
     */
    @ApiModelProperty(value = "标识位", example = "0")
    private int flag = 0;

    /**
     * 实收手续费，实际收取的手续费。
     */
    @ApiModelProperty(value = "实收手续费", example = "0.000000000000000001")
    private String realFee;

    /**
     * 折扣手续费，折扣后的手续费。
     */
    @ApiModelProperty(value = "折扣手续费", example = "0.000000000000000001")
    private String discountFee;
}
